package com.mvc.controller;

import hbm.Sucursal;
import hbm.SucursalDAO;
import hbm.Empleados;
import hbm.EmpleadosDAO;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.hibernate.Session;
import org.hibernate.Transaction;

public class EmpleadoController extends HttpServlet {

	/**
	 * The doGet method of the servlet. <br>
	 * 
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request
	 *            the request send by the client to the server
	 * @param response
	 *            the response send by the server to the client
	 * @throws ServletException
	 *             if an error occurred
	 * @throws IOException
	 *             if an error occurred
	 */

	public class EmpleadoSucursal {

		private String empleado;
		private String sucursal;

		public String getEmpleado() {
			return empleado;
		}

		public String getSucursal() {
			return sucursal;
		}

		public void setEmpleado(String empleado) {
			this.empleado = empleado;
		}

		public void setSucursal(String sucursal) {
			this.sucursal = sucursal;
		}

	}

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	@SuppressWarnings("unchecked")
	public void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		String opcion = request.getParameter("opcion");

		if (opcion != null && opcion.equals("elimina")) {
			String boton = request.getParameter("boton");
			if (boton == null) {
				List<Empleados> listaEmpleados = new EmpleadosDAO().findAll();
				request.getSession().setAttribute("listadoEmpleado",
						listaEmpleados);
				response.sendRedirect("./jsp/eliminarEmpleado.jsp");
			} else {
				String idEmpleados = request.getParameter("idEmpleado");
				Empleados empleado = new Empleados();
				empleado.setId(Integer.parseInt(idEmpleados));
				Session session = new EmpleadosDAO().getSession();
				Transaction tx = session.beginTransaction();
				Object findAAgain = session.merge(empleado);
				session.delete(findAAgain);
				tx.commit();
				session.close();
				response.sendRedirect("./jsp/mantenimientoEmpleado.jsp");
			}
		}

		if (opcion != null && opcion.equals("empleado")) {
			String boton = request.getParameter("boton");
			if (boton != null && boton.equals("Guardar")) {

				Empleados empleado = new Empleados();

				String nombreEmpleado = request.getParameter("txtnombre");
				String dpiEmpleado = request.getParameter("txtdpi");
				String codigoEmpleado = request.getParameter("txtcodigo");
				String claveEmpleado = request.getParameter("txtclave");
				Integer idSucursal = Integer.parseInt(request
						.getParameter("idSucursal"));
				Sucursal sucursalSeleccionado = new SucursalDAO()
						.findById(idSucursal);
				empleado.setSucursal(sucursalSeleccionado);
				empleado.setNombre(nombreEmpleado);
				empleado.setDpi(dpiEmpleado);
				empleado.setCodigo(codigoEmpleado);
				empleado.setClaveAcceso(claveEmpleado);

				Session session = new EmpleadosDAO().getSession();

				Transaction tx = session.beginTransaction();
				session.saveOrUpdate(empleado);
				tx.commit();
				session.close();
				response.sendRedirect("./jsp/mantenimientoEmpleado.jsp");
			}
		}

		if (opcion != null && opcion.equals("consulta")) {
			Session session = new EmpleadosDAO().getSession();

			List<Empleados> listaEmpleados = new EmpleadosDAO().findAll();
			// List<Sucursal> listaSucursal = new ArrayList<Sucursal>();
			List<EmpleadoSucursal> listaEmpleadosSucursal = new ArrayList<EmpleadoSucursal>();

			Iterator itr = listaEmpleados.listIterator();
			if (listaEmpleados.size() != 0) {
				while (itr.hasNext()) {
					EmpleadoSucursal sr = new EmpleadoSucursal();
					Empleados s = (Empleados) itr.next();
					sr.setEmpleado(s.getNombre());
					Sucursal idSucursal = s.getSucursal();
					Sucursal sucursalIndex = new SucursalDAO()
							.findById(idSucursal.getId());
					sr.setSucursal(sucursalIndex.getNombre());
					// listaProveedor.add(proveedorIndex);

					listaEmpleadosSucursal.add(sr);
				}
			}
			request.getSession().setAttribute("listaEmpleadoSucursal",
					listaEmpleadosSucursal);
			session.close();
			response.sendRedirect("./jsp/mantenimientoEmpleado.jsp");
		}

		if (opcion != null && opcion.equals("edita")) {
			String boton = request.getParameter("boton");
			if (boton == null) {
				List<Empleados> listaEmpleados = new EmpleadosDAO().findAll();
				request.getSession().setAttribute("listadoEmpleado",
						listaEmpleados);
				response.sendRedirect("./jsp/seleccionEmpleado.jsp");
			}
		}

		if (opcion != null && opcion.equals("filtrar")) {
			Integer idEmpleados = Integer.parseInt(request
					.getParameter("idEmpleado"));
			Empleados empleadoSeleccionada = new EmpleadosDAO()
					.findById(idEmpleados);
			request.getSession().setAttribute("idEmpleadoSeleccionada",
					empleadoSeleccionada.getId());
			request.getSession().setAttribute("nombreEmpleadoSeleccionada",
					empleadoSeleccionada.getNombre());
			request.getSession().setAttribute("dpiEmpleadoSeleccionada",
					empleadoSeleccionada.getDpi());
			request.getSession().setAttribute("codigoEmpleadoSeleccionada",
					empleadoSeleccionada.getCodigo());
			request.getSession().setAttribute("claveEmpleadoSeleccionada",
					empleadoSeleccionada.getClaveAcceso());
			List<Sucursal> listaSucursal = new SucursalDAO().findAll();
			request.getSession().setAttribute("listadoSucursal", listaSucursal);
			response.sendRedirect("./jsp/editarEmpleado.jsp");
		}

		if (opcion != null && opcion.equals("listarEmpleado")) {
			List<Sucursal> listaSucursal = new SucursalDAO().findAll();
			request.getSession().setAttribute("listadoSucursal", listaSucursal);

			response.sendRedirect("./jsp/ingresoEmpleado.jsp");
		}

		if (opcion != null && opcion.equals("editando")) {
			String boton = request.getParameter("boton");
			if (boton != null && boton.equals("Editar")) {
				String nombreEmpleado = request.getParameter("txtnombre");
				String dpiEmpleado = request.getParameter("txtdpi");
				String codigoEmpleado = request.getParameter("txtcodigo");
				String claveEmpleado = request.getParameter("txtclave");
				Integer idEmpleados = Integer.parseInt(request
						.getParameter("idEmpleado"));
				Empleados empleadoSeleccionada = new EmpleadosDAO()
						.findById(idEmpleados);
				Integer idSucursal = Integer.parseInt(request
						.getParameter("idSucursal"));
				Sucursal sucursalSeleccionado = new SucursalDAO()
						.findById(idSucursal);

				empleadoSeleccionada.setSucursal(sucursalSeleccionado);
				empleadoSeleccionada.setNombre(nombreEmpleado);
				empleadoSeleccionada.setDpi(dpiEmpleado);
				empleadoSeleccionada.setCodigo(codigoEmpleado);
				empleadoSeleccionada.setClaveAcceso(claveEmpleado);

				Session session = new EmpleadosDAO().getSession();

				Transaction tx = session.beginTransaction();
				session.saveOrUpdate(empleadoSeleccionada);
				tx.commit();
				session.close();
				List<Empleados> listaEmpleados = new EmpleadosDAO().findAll();
				request.getSession().setAttribute("listadoEmpleado",
						listaEmpleados);
				response.sendRedirect("./jsp/mantenimientoEmpleado.jsp");
			}
		}
	}

}
